package com.wondertek.service.service.sys;

import com.baomidou.mybatisplus.extension.service.IService;

import com.wondertek.service.dto.sys.req.SysDepartAddReq;
import com.wondertek.service.dto.sys.req.SysDepartQueryReq;
import com.wondertek.service.dto.sys.req.SysDepartUpdateReq;
import com.wondertek.service.entity.sys.SysDepartPo;
import io.lettuce.core.dynamic.annotation.Param;

import java.util.List;

/**
 * @author xqs
 */
public interface ISysDepartService extends IService<SysDepartPo> {

    /**
     * 查询所有部门
     * @return /
     */
    List<SysDepartPo> findList(SysDepartQueryReq sysDepartQueryReq);

    /**
     * 查询所有部门 (树形结构)
     * @return /
     */
    List<SysDepartPo> findTree(SysDepartQueryReq sysDepartQueryReq);

    /**
     * 查询所有下级部门
     * @return /
     */
    List<SysDepartPo> findChildrenList(String departCode);

    /**
     * 查询所有下级部门(树形结构)
     * @return /
     */
    List<SysDepartPo> findChildrenTree(String departCode);

    /**
     * 用户id查询部门
     * @param userId /
     * @return /
     */
    List<SysDepartPo> findListByUserId(String userId);

    /**
     * 新增部门
     * @param sysDepartAddReq /
     */
    void add(SysDepartAddReq sysDepartAddReq);

    /**
     * 上级同部门
     * @param id /
     * @return /
     */
    List<SysDepartPo> findParentTypeList(String id);

    /**
     * 修改部门
     * @param sysDepartUpdateReq /
     */
    void update(SysDepartUpdateReq sysDepartUpdateReq);

    /**
     * 删除部门
     * @param id /
     */
    void delete(String id);

    /**
     * 根据部门id查询本级完整上下级
     * @param departIds /
     * @return /
     */
    List<SysDepartPo> findAllListByDepartIds(@Param("departIds") List<String> departIds);

    /**
     * 根据部门id查询对应所有上级
     * @param departIds /
     * @return /
     */
    List<SysDepartPo> findParentListByDepartIds(@Param("departIds") List<String> departIds);

    /**
     * 根据部门id查询对应所有下级
     * @param departIds /
     * @return /
     */
    List<SysDepartPo> findChildListByDepartIds(@Param("departIds") List<String> departIds);
}
